#-------------------------------------------------------------------------------
# Name:        module1
# Purpose:
#
# Author:      ingenieria
#
# Created:     19/08/2011
# Copyright:   (c) ingenieria 2011
# Licence:     <your licence>
#-------------------------------------------------------------------------------
#!/usr/bin/env python

def quita_numeros():
    archivo_entrada = open("grammar.txt", "r")
    archivo_salida = open("grammar salida.txt", "w")
    while True:
      linea = archivo_entrada.readline()
      if not linea: break
      if (len(linea)>0):
        n=0
        while linea[n] == ' ':
            n=n+1

        while linea[n] in ['0', '1', '2', '3','4','5','6','7','8','9']:
            n=n+1
        nueva_linea = linea[n:]
        archivo_salida.write(nueva_linea)

def main():
    archivo_entrada = open("Gramatica.py", "r")
    archivo_salida = open("yacc.py", "w")
    linea = archivo_entrada.readline()
    encabezado=""
    nombre=""
    regla=""
    archivo_salida.write("""import ply.yacc as yacc2
from lex import tokens\n
precedence = (
    ('left', 'NOT'),
    ('left', '+', '-', 'OR'),
    ('left', '*', '/', 'AND'),
)\n""")
    c=0
    while True:
      if not linea: break
      if len(linea)>1 and linea.find(':')>0 and linea[0]<>'#':
        if c>0:
            regla=regla[:-1]
            regla=regla+"'''\n"
            regla=regla + "\tprint '%s'\n\n"%nombre
        archivo_salida.write(regla)
        c=c+1
        nombre = linea[0:linea.find(':')]
        encabezado = "def p_" + nombre + "(p):\n\t'''"
        regla=encabezado
      if linea.find("#")>=0:
        linea = linea[:linea.find("#")] + '\n'
      regla=regla+linea
      linea = archivo_entrada.readline()
    regla=regla[:-1]
    regla=regla+"'''\n"
    regla=regla + "\tprint '%s'\n\n"%nombre
    archivo_salida.write(regla)
    archivo_salida.write("""
def p_error(p):
    if p <> None:
        print "Error sintactico en linea "+str(p.lineno)+". No se esparaba "+str(p.type)+" ",p
    else:
        print p

# Build the parser
def main():
    pass
parser = yacc2.yacc()
#parser.parse("".join(open("prueba2.txt","r").readlines()))""")
    archivo_salida.close()

if __name__ == '__main__':
    main()
